home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / dskut / fix_disk.zip / CLEARFAT.ASM < prev    next >
Assembly Source File  |  1987-03-04  |  6KB  |  157 lines

  1. PAGE ,132
  2. TITLE Clear Disk File Allocation Table, Version 1.00, 04-Mar-1987
  3.  
  4. CODE      SEGMENT BYTE PUBLIC 'CODE'
  5.  
  6.           ASSUME  CS:CODE,DS:CODE,ES:CODE,SS:CODE
  7.  
  8.           ORG     5CH
  9.  
  10. FCB       LABEL   BYTE
  11.  
  12.           ORG     100H
  13.  
  14. START:    JMP     BEGIN
  15.  
  16. SIGNON    DB      "Clear Disk File Allocation Table Program, Version 1.00",13,10
  17.           DB      "SMG Software",13,10
  18.           DB      "(C) Copyright 1987 Steven Georgiades",13,10,10,"$"
  19.  
  20. WARNING   DB      "ALL of the files on drive x: WILL be corrupted!!",7,7,13,10 
  21.           DB      "Proceed ONLY if your disk is already corrupted and",13,10
  22.           DB      "you wish to make one last attempt to recover your data.",13,10
  23.           DB      "For more information, refer to CLEARFAT.DOC.",13,10,10
  24. DRV_PTR   DB      "ALL of the files on drive x: WILL be corrupted!!",7,7,13,10 
  25.           DB      "Do you wish to continue?",7,7," (Y/N) $"
  26.  
  27. SURE      DB      13,10,"Are you SURE?",7,7," (Y/N) $"
  28.  
  29. ABRT_MSG  DB      13,10,"Aborted!",7,13,10,"$"
  30. DONE_MSG  DB      13,10,10,"The FAT for drive x: has been cleared!",7,13,10,"$"
  31. ERR_DRV   DB      "Invalid Drive Letter!",7,13,10,"$"
  32. ERR_RD    DB      "Error Reading Boot Record!",7,13,10,"$"
  33. FDSK_MSG  DB      "I REFUSE to Clear the FAT of a Fixed Disk!",7,13,10,"$"
  34.  
  35. DRIVE     DB      ?
  36. FATCNT    DW      ?
  37. FATSEC    DW      ?
  38. MEDIA     DB      ?
  39. SECSIZE   DW      ?
  40. YBUF      DB      2,?,?,?
  41.  
  42. BEGIN:    PUSH    AX                            ; Save Drive Validity Info
  43.           MOV     AH,9                          ; Output Sign-On Message
  44.           MOV     DX,OFFSET SIGNON
  45.           INT     21H
  46.           POP     AX                            ; Restore Drive Validity Info
  47.           CMP     AL,0                          ; If Invalid,
  48.           JE      DRV_OK
  49.           MOV     DX,OFFSET ERR_DRV             ;   Setup Pointer to Error Msg
  50. ERR_OUT:  MOV     AH,9                          ;   Output Error Message
  51.           INT     21H
  52.           MOV     AX,4C01H                      ;   Exit to DOS (Return = 1)
  53.           INT     21H
  54. DRV_OK:   MOV     AL,FCB[0]                     ; Read Drive Number
  55.           DEC     AL
  56.           JNS     NOT_DEF                       ; If Default,
  57.           MOV     AH,19H                        ;   Get Default Drive Number
  58.           INT     21H
  59. NOT_DEF:  MOV     DRIVE,AL                      ; Convert Drive Number to Letter
  60.           ADD     AL,'A'
  61.           MOV     WARNING[26],AL                ; Save in Four (4) Places
  62.           MOV     DRV_PTR[26],AL
  63.           MOV     DONE_MSG[21],AL
  64.           MOV     BX,OFFSET FATBUF
  65.           MOV     AL,DRIVE                      ; Read Disk Boot Record
  66.           MOV     CX,1
  67.           MOV     DX,0
  68.           INT     25H
  69.           JNC     RD_OK
  70.           POPF
  71.           MOV     DX,OFFSET ERR_RD
  72.           JMP     ERR_OUT
  73. RD_OK:    POPF
  74.           CMP     FATBUF[19],5000
  75.           JB      NOT_HARD
  76.           MOV     DX,OFFSET FDSK_MSG
  77.           JMP     SHORT ERR_OUT
  78. NOT_HARD: MOV     AX,FATBUF[11]                 ; Save Sector Size
  79.           MOV     SECSIZE,AX
  80.           MOV     AL,BYTE PTR FATBUF[16]        ; Save FAT Count
  81.           XOR     AH,AH
  82.           MOV     FATCNT,AX
  83.           MOV     AL,BYTE PTR FATBUF[21]        ; Save Media Descriptor Byte
  84.           MOV     MEDIA,AL
  85.           MOV     BX,FATBUF[22]                 ; Save Sectors per FAT
  86.           MOV     FATSEC,BX
  87.           PUSH    CS                            ; Point to FAT Buffer
  88.           POP     ES
  89.           MOV     DI,OFFSET FATBUF
  90.           MOV     BX,FATSEC                     ; Outer Loop LCV = FATSEC
  91.           MOV     CX,SECSIZE                    ; Inner Loop LCV = SECSIZE
  92.           MOV     AL,MEDIA                      ; Setup Blank FAT
  93.           STOSB
  94.           DEC     CX
  95.           MOV     AL,0FFH
  96.           STOSB
  97.           DEC     CX
  98.           STOSB
  99.           DEC     CX
  100.           XOR     AL,AL
  101. FATLOOP:  REP     STOSB
  102.           MOV     CX,SECSIZE
  103.           DEC     BX
  104.           JNZ     FATLOOP
  105.           MOV     AH,9                          ; Output Warning Message
  106.           MOV     DX,OFFSET WARNING
  107.           INT     21H
  108.           CALL    YESNO                         ; Continue?
  109.           JC      ABORT                         ; No, Abort
  110.           MOV     AH,9                          ; Warn Again
  111.           MOV     DX,OFFSET SURE
  112.           INT     21H
  113.           CALL    YESNO                         ; Continue?
  114.           JC      ABORT                         ; No, Abort
  115.           MOV     CX,FATCNT                     ; Write FAT(s) to Disk
  116.           MOV     DX,1
  117. WR_LOOP:  PUSH    CX
  118.           PUSH    DX
  119.           MOV     AL,DRIVE                      ; Write FAT #1
  120.           MOV     CX,FATSEC
  121.           MOV     DX,1
  122.           MOV     BX,OFFSET FATBUF
  123.           INT     26H
  124.           POPF
  125.           POP     DX
  126.           POP     CX
  127.           ADD     DX,FATSEC
  128.           LOOP    WR_LOOP
  129.           MOV     AH,9                          ; Output DONE Message
  130.           MOV     DX,OFFSET DONE_MSG
  131.           INT     21H
  132.           MOV     AX,4C00H                      ; Exit to DOS
  133.           INT     21H
  134. ABORT:    MOV     AH,9                          ; Output ABORT Message
  135.           MOV     DX,OFFSET ABRT_MSG
  136.           INT     21H
  137.           MOV     AX,4C02H                      ; Exit to DOS
  138.           INT     21H
  139.  
  140. YESNO:    MOV     AX,0C0AH                      ; Read from Keyboard
  141.           MOV     DX,OFFSET YBUF
  142.           INT     21H
  143.           CMP     YBUF[1],1                     ; If No Response, Error
  144.           JNE     YESNO1
  145.           MOV     AL,YBUF[2]                    ; Read Character
  146.           AND     AL,0DFH                       ; Convert to Upper Case
  147.           CMP     AL,'Y'                        ; If 'Y', Done
  148.           JE      YESNO2
  149. YESNO1:   STC                                   ;   Set Carry Flag
  150. YESNO2:   RET                                   ; Done
  151.  
  152. FATBUF    LABEL   WORD
  153.  
  154. CODE      ENDS
  155.  
  156.           END     START
  157.